/*
 * @Overview:   axios-transform
 * @Author:     Zi_Jun
 * @Email:      zijun2030@163.com
 * @Date:       2020/12/7 11:34
 * @Mark:       //
 */
import type { AxiosRequestConfig, AxiosResponse } from 'axios';
import type { IRequestOptions, IResult } from './types';

export abstract class AxiosTransform {
  /**
   * 请求之前，处理请求参数
   */
  beforeRequest?: (config: AxiosRequestConfig, options: IRequestOptions) => AxiosRequestConfig;
  /**
   * 请求成功，处理数据
   */
  transformRequestData?: (res: AxiosResponse<IResult>, options: IRequestOptions) => any;
  /**
   * 请求失败，处理数据
   */
  requestCatch?: (e: Error) => Promise<any>;
  /**
   * 请求之前，数据拦截器
   */
  requestInterceptors?: (config: AxiosRequestConfig) => AxiosRequestConfig;
  /**
   * 请求之后，数据拦截器
   */
  responseInterceptors?: (res: AxiosResponse) => any;
  /**
   * 请求之前的拦截器错误处理
   */
  requestInterceptorsCatch?: (error: Error) => void;
  /**
   * 请求之后的拦截器错误处理
   */
  responseInterceptorsCatch?: (error: Error) => void;
}
